<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <button>1</button>
  <button>2</button>
  <button>3</button>
  <button>4</button>
</body>

</html>
<script>
  var n = 0;

  function a() {
    var n = 10;

    function b() {
      n++;
      console.log(n);
    }
    b();
    return b;
  }
  var c = a();
  c();
  console.log(n);

  // var a = n && 100; // && 前边成立给后边
  // var b = n || 100; // || 前边成立给前边
  // a && a()

  var i = 10;

  function fn() {
    return function (n) {
      console.log(n + (++i));
    }
  }
  var f = fn();
  f(20);
  fn()(20);
  fn()(30);
  f(30);
</script>
<script src=''>
  let btns = document.getElementsByTagName('button');
  for (let i = 0; i < btns.length; i++) {
    btns[i].onclick = function () {
      console.log(i)
    }
  }

  /* function fn(n) {
    // console.log(n)
    btns[n].onclick = function () {
      console.log(n + 1)
    }
  }


  for (var i = 0; i < btns.length; i++) {
    function f(m) {
      return function () {
        console.log(m)
      }
    }
    btns[i].onclick = f(i)

    // console.log(i)

    // function fn() {
    //   console.log(i)
    // }
    //  闭包就是一个私有作用域 用来保护私有变量不受外界干扰
    //  不消毁的私有作用域；

    // fn(i)
    // (function (n) {
    //   btns[n].onclick = function () {
    //     console.log(n + 1)
    //   }
    // })(i)
    // 高阶




    // btns[i].onclick = function () {
    //   console.log(i + 1)
    // }
  } */
  // fn()
</script>
<script src=''>
  /* 
    var
    function 
    let 
    const 
    class
  */

  //函数式编程
  function fn() {

  }
  var a = 10,
    b = 20;
  // console.log(a + b)
  function sum(a1, b1) {
    // 私有变量： 形参  作用域中声明的变量
    // 上级作用域： 函数在那个作用域定义的 ； 作用域链：变量的查找机制
    console.log(a1 + b1)
    // console.log(qq)
  }
  sum(a, b)
</script>